1、题干
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例1:
输入:0.625
输出:"0.101"
示例2:
输入:0.1
输出:"ERROR"
提示:0.1无法被二进制准确表示
提示:
- 32位包括输出中的
"0."
这两位。 - 题目保证输入用例的小数位数最多只有
6
位
2、思路1-数学模拟
将小数 num
倍乘 2
,所得结果的整数部分累加到结果字符串,小数部分赋值给 num
,循环上述操作直至 32 次或 num
为 0
3、代码
function printBin(num: number): string {
let ans = '0.'
while (num && ans.length <= 32) {
num = num * 2;
const k = num % 2 >> 0;
ans += k;
num -= k;
}
return ans.length > 32 ? 'ERROR' : ans;
};
4、复杂度
- 时间复杂度:
- 空间复杂度:
5、执行结果
6、思路2-API
调用内置API toString
实现
7、代码
function printBin(num: number): string {
const ans = num.toString(2);
return ans.length > 32 ? 'ERROR' : ans;
};